package com.question.business.dept.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.question.business.dept.entity.Dept;
import com.question.business.dept.model.ao.*;
import com.question.business.dept.model.vo.DeptAddVO;
import com.question.business.dept.model.vo.DeptDetailVO;
import com.question.business.dept.model.vo.DeptDropDownVO;
import com.question.business.dept.model.vo.DeptVO;

import javax.servlet.ServletOutputStream;
import java.util.List;

/**
 * 部门服务
 *
 * @author star
 * @since 2023-09-14
 */
public interface IDeptService extends IService<Dept> {

    /**
     * 部门分页查询
     *
     * @param ao 请求参数
     * @return Page<DeptVO> 响应参数
     */
    Page<DeptVO> queryDeptPage(DeptPageAO ao);

    /**
     * 部门明细查询
     *
     * @param id 部门ID
     * @return DeptDetailVO 响应参数
     */
    DeptDetailVO queryDeptDetail(String id);

    /**
     * 部门新增数据
     *
     * @param ao 请求参数
     * @return DeptAddVO 响应参数
     */
    DeptAddVO addDept(DeptAddAO ao);

    /**
     * 部门修改数据
     *
     * @param ao 数据
     */
    void updateDept(DeptUpdateAO ao);

    /**
     * 部门删除数据
     *
     * @param id 部门ID
     */
    void deleteDept(String id);

    /**
     * 部门批量删除数据
     *
     * @param ids 部门ID
     */
    void deleteBatchDept(List<String> ids);

    /**
     * 部门导出数据
     *
     * @param ao     请求参数
     * @param stream 输出流
     */
    void exportDept(DeptPageAO ao, ServletOutputStream stream);

    /**
     * 部门启用、停用
     *
     * @param ao 请求参数
     */
    void enableDept(DeptEnabledAO ao);

    /**
     * 部门下拉列表查询
     *
     * @param ao 请求参数
     * @return List<DeptDropDownVO> 响应参数
     */
    List<DeptDropDownVO> queryDeptDropDown(DeptDropDownAO ao);
}